package cn.ezios.huo.system.dao.service.impl;

import cn.ezios.huo.system.dao.domain.SysDictCatalog;
import cn.ezios.huo.system.dao.dto.SysDictOptionDTO;
import cn.ezios.huo.system.dao.service.SysDictCatalogService;
import cn.ezios.huo.system.dao.vo.SysDictOptionSelectVo;
import cn.ezios.huo.system.dao.vo.SysDictOptionVO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import cn.ezios.huo.system.dao.domain.SysDictOption;
import cn.ezios.huo.system.dao.service.SysDictOptionService;
import cn.ezios.huo.system.dao.mapper.SysDictOptionMapper;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Optional;

/**
 * @author 王坚
 * @description 针对表【sys_dict_option(系统字典项)】的数据库操作Service实现
 * @createDate 2024-07-17 09:49:16
 */
@Service
@RequiredArgsConstructor
public class SysDictOptionServiceImpl extends ServiceImpl<SysDictOptionMapper, SysDictOption>
        implements SysDictOptionService {

    private final SysDictCatalogService sysDictCatalogService;

    /**
     * 分页查询
     *
     * @param current
     * @param size
     * @param dto
     * @return
     */
    @Override
    public IPage<SysDictOptionVO> queryPage(Integer current, Integer size, SysDictOptionDTO dto) {
        Page<SysDictOption> page = Page.of(current, size);
        return lambdaQuery()
                .eq(dto.getDictId() != null && !dto.getDictId().isBlank(), SysDictOption::getDictId, dto.getDictId())
                .like(dto.getLabel() != null && !dto.getLabel().isBlank(), SysDictOption::getLabel, dto.getLabel())
                .like(dto.getVal() != null && !dto.getVal().isBlank(), SysDictOption::getVal, dto.getVal())
                .page(page)
                .convert(origin -> {
                    SysDictOptionVO vo = new SysDictOptionVO();
                    BeanUtils.copyProperties(origin, vo);
                    return vo;
                });
    }

    /**
     * 根据字典code查询字典项列表
     *
     * @param code
     * @return
     */
    @Override
    public List<SysDictOptionSelectVo> listByCode(String code) {
        Optional<SysDictCatalog> opt = sysDictCatalogService.lambdaQuery()
                .select(SysDictCatalog::getDictId)
                .eq(SysDictCatalog::getCode, code).oneOpt();
        return opt.map(sysDictCatalog -> lambdaQuery()
                .select(SysDictOption::getLabel, SysDictOption::getVal)
                .eq(SysDictOption::getDictId, sysDictCatalog.getDictId())
                .list()
                .stream()
                .map(item -> {
                    SysDictOptionSelectVo vo = new SysDictOptionSelectVo();
                    vo.setLabel(item.getLabel());
                    vo.setValue(item.getVal());
                    return vo;
                })
                .toList())
                // 如果为空
                .orElseGet(List::of);

    }
}




